﻿#include <iostream>
using namespace std;
/* 对象创建型模式
1.意图
保证一个类仅有一个实例，并提供一个访问它的全局访问点
2.适用性
a.当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时
b.当这个唯一实例应该是通过子类化可扩展的，并且客户应该无需更改代码就能使用一个扩展的实例时
*/
class Singleton
{
public:
	static Singleton* GetInstance()
	{
		//多线程可以加锁
		if (pSingleton == NULL)
		{
			pSingleton = new Singleton();
		}
		return pSingleton;
	}
private:
	Singleton()
	{
		cout << "构造开始----" << endl;
	}
	static Singleton* pSingleton;
};
//懒汉模式
Singleton* Singleton::pSingleton = NULL;
//饿汉模式
//Singleton* Singleton::pSingleton = new Singleton;
/*
int main()
{
	Singleton* p1 = Singleton::GetInstance();
	Singleton* p2 = Singleton::GetInstance();
	cout << "p1:" << p1 << endl;
	cout << "p2:" << p2 << endl;
	


	return 0;
}
*/